package core

import (
	"blog_go/global"
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"time"
)

func InitGorm() *gorm.DB {
	dns := global.Conf.Mysql.Dsn()
	var mysqlLogger logger.Interface
	if global.Conf.System.Env == "debug" {
		mysqlLogger = logger.Default.LogMode(logger.Info)
	} else {
		mysqlLogger = logger.Default.LogMode(logger.Error)
	}
	db, err := gorm.Open(mysql.Open(dns), &gorm.Config{
		// 全局禁用 为了确保数据一致性，GORM 会在事务里执行写入操作（创建、更新、删除）。如果没有这方面的要求，您可以在初始化时禁用它，这将获得大约 30%+ 性能提升
		SkipDefaultTransaction: true,
		Logger:                 mysqlLogger,
	})
	if err != nil {
		global.Log.Fatalf(fmt.Sprintf("mysqll连接失败 [%s]", dns))
	}
	sqlDB, _ := db.DB()
	sqlDB.SetMaxIdleConns(10)               // 最大空闲连接数
	sqlDB.SetMaxOpenConns(100)              // 最多可容纳
	sqlDB.SetConnMaxLifetime(time.Hour * 4) // 连接最大复用时间
	global.DB = db
	return db
}
